/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package db_interaction;

import javax.persistence.Entity;
import javax.persistence.Table;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import org.hibernate.Query;
import org.hibernate.Session;

/**
 *
 * @author Neves
 */
@Entity
@Table(name = "grupo_Utilizador")
public class Grupo_Utilizador implements Serializable {

    @Id
    @GeneratedValue
    private int Grupo_Utilizador_id;
    @Basic
    @Column(name = "Grupo_Utilizador_Utilizador_id")
    private int Grupo_Utilizador_Utilizador_id;
    @Basic
    @Column(name = "Grupo_Utilizador_Grupo_id")
    private int Grupo_Utilizador_Grupo_id;
    @Basic
    @Column(name = "Grupo_Utilizador_activo")
    private boolean Grupo_Utilizador_activo;

    //GETS
    public int GETGrupo_Utilizador_id() {
        return this.Grupo_Utilizador_id;
    }

    public int GETGrupo_Utilizador_Utilizador_id() {
        return this.Grupo_Utilizador_Utilizador_id;
    }

    public int GETGrupo_Utilizador_Grupo_id() {
        return this.Grupo_Utilizador_Grupo_id;
    }

    public boolean GETGrupo_Utilizador_activo() {
        return this.Grupo_Utilizador_activo;
    }

    //SETS
    public void SETGrupo_Utilizador_id(int Grupo_id) {
        this.Grupo_Utilizador_id = Grupo_id;
    }

    public void SETGrupo_Utilizador_Utilizador_id(int Grupo_id) {
        this.Grupo_Utilizador_Utilizador_id = Grupo_id;
    }

    public void SETGrupo_Utilizador_Grupo_id(int Grupo_id) {
        this.Grupo_Utilizador_Utilizador_id = Grupo_id;
    }

    public void SETGrupo_Utilizador_activo(boolean Grupo_activo) {
        this.Grupo_Utilizador_activo = Grupo_activo;
    }

    //DB access
    public int insertEntity(Grupo_Utilizador GU) {
        //returns 1 if successfull
        //return -1 if error
        try {
            Session s = NewHibernateUtil.getSessionFactory();
            s.save(GU);
            s.getTransaction().commit();
            System.out.println("Inserido");
            return 1;
        } catch (Exception e) {
            return -1;
        }
    }

    public Grupo_Utilizador SelectEntity(Grupo_Utilizador GU) {
        Grupo_Utilizador g_u = null;

        //returns sellected friend if successfull
        //return null
        try {
            Session s = NewHibernateUtil.getSessionFactory();
            g_u = (Grupo_Utilizador) s.load(Grupo_Utilizador.class, GU.Grupo_Utilizador_Grupo_id);
            s.getTransaction().commit();
            return g_u;

        } catch (Exception e) {
            return g_u;
        }
    }

    public List<Mensagens> SelectGrupoMessagens(int id_user) {

        List<Grupo_Utilizador> g_u = null;
        Mensagens men = new Mensagens();
        List<Mensagens> mensagens_utilizador = new ArrayList<Mensagens>();

        try {
            Session s = NewHibernateUtil.getSessionFactory();
            s.beginTransaction();

            Query q = s.createQuery("from Grupo_Utilizador where Grupo_Utilizador_Utilizador_id = " + id_user);
            g_u = q.list();

            s.getTransaction().commit();

            for (int i = 0; i < g_u.size(); i++) {
                s.beginTransaction();

                Query q2 = s.createQuery("from Mensagens where Mensagens_Utilizador_id = " + g_u.get(i).GETGrupo_Utilizador_Utilizador_id());
                men = (Mensagens) q2.list().get(0);

                s.getTransaction().commit();

                mensagens_utilizador.add(men);
            }

            return mensagens_utilizador;

        } catch (Exception e) {
            return null;
        }

    }

    public int UpdateEntity(Grupo_Utilizador GU) {
        //returns 1 if successfull
        //return -1 if error
        try {
            Session s = NewHibernateUtil.getSessionFactory();
            s.save(GU);
            s.getTransaction().commit();
            return 1;

        } catch (Exception e) {
            return -1;
        }
    }
}
